home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / asprog.EXE / CCHAR.ASM < prev    next >
Assembly Source File  |  1990-02-05  |  2KB  |  124 lines

  1.     TITLE    C_CHAR
  2.     page    ,132
  3.  
  4. _TEXT      SEGMENT  BYTE PUBLIC 'CODE'
  5.     ASSUME  cs: _TEXT
  6.  
  7.     ORG    100H
  8.  
  9.     public    CCHAR, Vector, Catch, Install
  10.     public    TempA, TempD, TempF
  11.  
  12. CCHAR    PROC    FAR
  13.     jmp    Install
  14.  
  15. Catch:    pushf
  16.     mov    WORD PTR cs:[TempA], ax
  17.     pop    ax
  18.     mov    WORD PTR cs:[TempF], ax
  19.     mov    ax, ds
  20.     mov    WORD PTR cs:[TempD], ax
  21.  
  22.     in    al, 60h            ; Get the character code
  23.  
  24.     push    ds            ; Save everything for later
  25.     push    bx
  26.     push    ax
  27.     mov    ax, 0B800h        ; Display in lower right-hand corner
  28.     mov    ds, ax
  29.     mov    bx, 24 * 160 + 78 * 2
  30.  
  31.     pop    ax            ; Get a copy of the character,
  32.     push    ax
  33.     call    makehex            ;  convert low nybble to ASCII hex,
  34.     mov    byte ptr [ bx + 2 ], al    ;  and output it.
  35.  
  36.     pop    ax            ; Do the same for the upper nybble
  37.     push    ax
  38.     shr    al, 1
  39.     shr    al, 1
  40.     shr    al, 1
  41.     shr    al, 1
  42.     call    makehex
  43.     mov    byte ptr [ bx + 0 ], al
  44.  
  45.     pop    ax            ; Recover our senses
  46.     pop    bx
  47.     pop    ds
  48.  
  49. GoVect:    mov    ax, WORD PTR cs:[Vector+2]
  50.     push    ax
  51.     mov    ax, WORD PTR cs:[Vector]
  52.     push    ax
  53.     mov    ax, WORD PTR cs:[TempD]
  54.     mov    ds,ax
  55.     mov    ax, WORD PTR cs:[TempF]
  56.     push    ax
  57.     popf
  58.     mov    ax, WORD PTR cs:[TempA]
  59.     ret                ; (Far return to original vector)
  60.  
  61. TempA:    dw    0
  62. TempD:    dw    0
  63. TempF:    dw    0
  64. Vector:    dd    0
  65. Char:    dw    0
  66.  
  67. makehex:
  68.     and    al, 0Fh            ; Mask off the nybble
  69.     add    al, '0'            ; Convert to ASCII
  70.     cmp    al, '9'            ; In the A-F range?
  71.     jle    makedone        ; Nope, we're done
  72.     add    al, 7            ; Yes, convert to letters
  73. makedone:
  74.     db    0C3h            ; (short return)
  75.  
  76. Install:
  77.     push    cs            ; Establish segment registers
  78.     pop    es
  79.     sub    ax, ax
  80.     mov    ds, ax
  81.     mov    di, OFFSET Vector
  82.     mov    si, 9*4
  83.     movsw                ; Copy the current vector
  84.     movsw
  85.  
  86.     mov    ax,cs            ; Install my cs
  87.     mov    ds:[9*4+2],ax
  88.     mov    ax, OFFSET Catch    ;  and IP
  89.     mov    ds:[9*4], ax
  90.  
  91.     push    cs
  92.     pop    ds
  93.  
  94.     mov    dx, OFFSET Message    ; Tell them what we've done
  95.     mov    ah,9
  96.     int    21h
  97.  
  98.     mov    ax, WORD PTR cs:[2Eh]    ; Free up environment
  99.     mov    es, ax
  100.     mov    ax, 4900H
  101.     int    21h
  102.  
  103.     mov    dx, OFFSET Install    ; Calculate # of paragraphs
  104.     add    dx, 15            ; Minus PSP, round up
  105.     rcr    dx, 1
  106.     sar    dx, 1
  107.     sar    dx, 1
  108.     sar    dx, 1
  109.  
  110.     mov    ax,3100h
  111.     int    21h            ; Terminate and stay resident
  112.     int    20h            ; Just in case
  113.  
  114. Message:
  115.     db    "CCHAR installed. Reboot to remove."
  116.     db    13,10,"$"
  117.  
  118. My_DS:    dw    0
  119.  
  120. CCHAR    ENDP
  121.  
  122. _TEXT    ENDS
  123. END    CCHAR
  124.